package com.zyl.blog.processing.processor;

import com.zyl.blog.common.domain.file.bean.FileStorage;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 文件处理器接口
 * 定义各类型文件的通用处理方法
 * 
 * @author FinalFantasy
 * @version v1.0
 * @date 2025/09/01
 */
public interface FileProcessor {

    /**
     * 获取支持的文件类型
     * @return 支持的文件类型列表
     */
    List<String> getSupportedTypes();

    /**
     * 检查是否支持该文件类型
     * @param fileType 文件类型
     * @return 是否支持
     */
    boolean supports(String fileType);

    /**
     * 提取文件文本内容
     * @param file 文件
     * @return 提取的文本内容
     */
    String extractText(MultipartFile file);

    /**
     * 提取文件文本内容（基于存储的文件）
     * @param fileStorage 文件存储信息
     * @return 提取的文本内容
     */
    String extractText(FileStorage fileStorage);

    /**
     * 提取文件元数据
     * @param file 文件
     * @return 元数据信息
     */
    Map<String, Object> extractMetadata(MultipartFile file);

    /**
     * 提取文件元数据（基于存储的文件）
     * @param fileStorage 文件存储信息
     * @return 元数据信息
     */
    Map<String, Object> extractMetadata(FileStorage fileStorage);

    /**
     * 验证文件格式
     * @param file 文件
     * @return 验证结果
     */
    boolean validateFormat(MultipartFile file);

    /**
     * 生成文件预览信息
     * @param fileStorage 文件存储信息
     * @return 预览信息
     */
    Map<String, Object> generatePreview(FileStorage fileStorage);

    /**
     * 获取处理器名称
     * @return 处理器名称
     */
    String getProcessorName();
}